//封装网络请求，首先导入axios
import axios from 'axios'
//消息提示的组件
import {Message} from "element-ui";
import router from "../router";

//拦截响应：对网络返回的响应先进行处理，response 是服务端响应的拦截器
axios.interceptors.response.use(success=>{
    //                    http响应码200            业务中返回的500也是服务端返回的
    if (success.status && success.status == 200 && success.data.status == 500){
        Message.error({message:success.data.msg})
        return;
    }
    if(success.data.msg){
        Message.success({message:success.data.msg})//服务端返回msg,前端提示，不返回不提示
    }
    return success.data;
},error => {
    if (error.response.status == 504 || error.response.status == 404){
        Message.error({message:'服务器出错啦jiu'})
    } else if (error.response.status == 403){
        Message.error({message:'权限不足，请联系管理员'})
    } else if (error.response.status == 401){
        Message.error({message:'尚未登录，请登录'})
        router.replace("/");
    } else {
        if(error.response.data.msg){
            Message.error({message:error.response.data.msg})
        } else {
            Message.error({message:'未知错误'})
        }
    }
    return;
})
//封装了post请求，以key value 形式传递
let base ='';//防止未来请求加前缀，如果有需求可修改base即可

export const postKeyValueRequest = (url,params) =>{
    return axios({
        method:'post',
        url:`${base}${url}`,
        data:params,//如果不加下面代码，会以json 格式向服务端传送数据，服务器不支持{key:value}
        // 转换后{key=value}
        transformRequest:[function(data){
            let ret ='';
            for(let i in data){
                ret += encodeURIComponent(i)+'='+encodeURIComponent(data[i])+'&'
            }
            console.log(ret);
            return ret;
        }],
        headers:{
            'Content-Type':'application/x-www-form-urlencoded'
        }
    })
}
//封装一个以json 格式发送的 post数据请求
export const postRequest=(url,params)=>{
    return axios({
        method: 'post',
        url:`${base}${url}`,
        data:params
    })
}
//
export const putRequest=(url,params)=>{
    return axios({
        method: 'put',
        url:`${base}${url}`,
        data:params
    })
}
export const getRequest=(url,params)=>{
    return axios({
        method: 'get',
        url:`${base}${url}`,
        data:params
    })
}
export const deleteRequest=(url,params)=>{
    return axios({
        method: 'delete',
        url:`${base}${url}`,
        data:params
    })
}
